// Example Bot #2: The Tag Team

import scala.collection.{ mutable ⇒ mutable }
import mutable.ArraySeq
import CellOccupantType._
import scala.math._

object ControlFunction {
	def welcome() {}

	def goodbye() {}

	def react(bot: ReactDlg) {
		val estadoEnte = AdminEstadosEntes.get(bot)

		val r1 = floor(random*Direction45.values.size).toInt
		bot.move(XY.fromDirection45(r1))

		val r2 = floor(random*Direction45.values.size).toInt
		bot.spawn(XY.fromDirection45(r2), ("energy",100))
	}

	///////////////////////////////

	class EstadoEnte {
		// TODO
	}

	object AdminEstadosEntes {
		private val memoriasEstadosEntes = mutable.Map[String, EstadoEnteAdmin]()
		private val PERIODO_DESCARTE_MUERTOS = 100
		private var temporizadorDescarteMuertos = PERIODO_DESCARTE_MUERTOS

		def get(bot: ReactDlg): EstadoEnte = {
			if (bot.generation == 0) {
				temporizadorDescarteMuertos -= 1
				if (temporizadorDescarteMuertos < 0) {
					descartarMuertos(bot.time)
					temporizadorDescarteMuertos = PERIODO_DESCARTE_MUERTOS
				}
			}

			val ee = memoriasEstadosEntes.getOrElse(bot.name, new EstadoEnteAdmin)
			ee.horaUltimoUso = bot.time
			ee
		}

		def descartarMuertos(horaActual: Int) = memoriasEstadosEntes.retain((_, e) ⇒ horaActual - e.horaUltimoUso < 10)

		class EstadoEnteAdmin extends EstadoEnte {
			var horaUltimoUso = 0
		}
	}

}




